package com.ssd.api.payment.dto.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;

/**
 * 退款状态枚举
 *
 * 该枚举类用于表示退款过程中的不同状态，包括从申请退款到成功或失败的各个阶段
 * 它通过数字代码和描述性字符串来标识每个状态，便于在系统中使用和展示
 *
 * @author zzj
 * @version 1.0
 */
public enum RefundStatusEnum {

    /**
     * 发起退款状态
     *
     * 表示用户已提交退款申请，等待处理的状态
     */
    APPLY_REFUND(0, "发起退款"),

    /**
     * 退款中状态
     *
     * 表示退款申请正在处理过程中，资金正在退回给用户的途中
     */
    SENDING(1, "退款中"),

    /**
     * 成功状态
     *
     * 表示退款已完成，资金已成功退回到用户账户
     */
    SUCCESS(2, "成功"),

    /**
     * 失败状态
     *
     * 表示退款过程中遇到问题，退款未能成功完成
     */
    FAIL(3, "失败");

    /**
     * 枚举项的代码值
     *
     * 使用@EnumValue注解，以便在MyBatis-Plus中直接使用该值进行数据库操作
     * 使用@JsonValue注解，表示在JSON序列化时使用该值
     */
    @EnumValue
    @JsonValue
    private final Integer code;

    /**
     * 枚举项的描述值
     *
     * 用于提供一个对枚举项含义的文本描述，在界面展示或日志记录时使用
     */
    private final String value;

    /**
     * 枚举构造方法
     *
     * 初始化一个新的枚举项，每个枚举项都有一个唯一的代码和一个描述性值
     *
     * @param code   枚举项的代码值
     * @param value  枚举项的描述值
     */
    RefundStatusEnum(Integer code, String value) {
        this.code = code;
        this.value = value;
    }

    /**
     * 获取枚举项的代码值
     *
     * @return 枚举项的代码值
     */
    public Integer getCode() {
        return this.code;
    }

    /**
     * 获取枚举项的描述值
     *
     * @return 枚举项的描述值
     */
    public String getValue() {
        return this.value;
    }
}

